#! /usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
import sys, os, sqlite3, todo
from elixir import *
from ventanaArticuloUI import Ui_Form

class FormArticulo(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui = Ui_Form()
        self.center()
        self.ui.setupUi(self)
        
        self.cargaArticulos()
        self.ui.botonActualizar.setHidden(True)
        self.ui.labelError.setText("")
        self.ui.treeWidget.resizeColumnToContents(0)
        self.ui.treeWidget.resizeColumnToContents(1)
        self.ui.treeWidget.resizeColumnToContents(2)
        self.ui.treeWidget.resizeColumnToContents(3)

    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def cargaArticulos(self):
        self.ui.treeWidget.clear()
        for articulo in todo.Articulo.query.all():
            item = QtGui.QTreeWidgetItem([str(articulo.id), articulo.nombre, str(articulo.precio), str(articulo.stock)])
            item.setTextAlignment(0, 2)
            item.setTextAlignment(2, 2)
            item.setTextAlignment(3, 2)
            self.ui.treeWidget.addTopLevelItem(item)

    def agregar(self):
        codigo = self.ui.spinCodigo.value()
        nombre = self.ui.campoNombre.text()
        precio = self.ui.spinPrecio.value()
        stock = self.ui.spinStock.value()

        if nombre == "":
            self.ui.labelError.setText("Debe proporcionar un nombre")
            self.ui.labelError.setStyleSheet("color:red")

        else:
            articulo = todo.Articulo.get(codigo)
            if articulo:
                self.ui.labelError.setText("El codigo no se puede repetir")
                self.ui.labelError.setStyleSheet("color:red")

            else:
                if todo.Articulo.get_by(nombre=unicode(nombre).lower()):
                    self.ui.labelError.setText("El nombre ya existe, cambielo por otro")
                    self.ui.labelError.setStyleSheet("color:red")

                else:
                    todo.Articulo(nombre=unicode(nombre).lower(), precio=precio, stock=stock)
                    session.commit()
                    self.limpiar()
                    self.cargaArticulos()

    def limpiar(self):
        self.ui.campoNombre.setText("")
        self.ui.spinPrecio.setValue(0)
        self.ui.spinStock.setValue(1)
        self.ui.spinCodigo.setEnabled(True)
        self.ui.campoNombre.setEnabled(True)
        self.ui.botonActualizar.setHidden(True)
        self.ui.botonAgregar.setHidden(False)
        self.ui.labelTitulo.setText("Nuevo Articulo - Indigo")
        self.ui.labelError.setText("")

    def eliminar(self):
        item = self.ui.treeWidget.currentItem()
        i = self.ui.treeWidget.indexOfTopLevelItem(item)

        mensaje = u"¿Esta seguro que desea elimnar el articulo: %s?" % item.text(1)
        reply = QtGui.QMessageBox.question(self, 'Mensaje',
            mensaje, QtGui.QMessageBox.Yes | 
            QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            self.ui.treeWidget.takeTopLevelItem(int(i))
            articulo = todo.Articulo.get(int(item.text(0)))
            articulo.delete()
            session.commit()
            self.cargaArticulos()
            
    def editar(self):
        item = self.ui.treeWidget.currentItem()
        self.ui.spinCodigo.setValue(int(item.text(0)))
        self.ui.spinCodigo.setEnabled(False)
        self.ui.campoNombre.setText(item.text(1))
        self.ui.campoNombre.setEnabled(False)
        self.ui.spinPrecio.setValue(int(item.text(2)))
        self.ui.spinStock.setValue(int(item.text(3)))
        self.ui.botonActualizar.setHidden(False)
        self.ui.botonAgregar.setHidden(True)
        self.ui.labelTitulo.setText("Editar Articulo - Indigo")
        
    def guardar(self):
        nombre = self.ui.campoNombre.text()
        precio = self.ui.spinPrecio.value()
        stock = self.ui.spinStock.value()

        articulo = todo.Articulo.get_by(nombre=unicode(nombre))
        articulo.precio = precio
        articulo.stock = stock
        session.commit()
        self.limpiar()
        self.cargaArticulos()

if __name__ == '__main__':
    todo.initDB()
    app = QtGui.QApplication(sys.argv)
    myapp = FormArticulo()
    myapp.show()
    sys.exit(app.exec_())